<?php
/**
 * fldcms
 * ============================================================================
 * 版权所有 2017 福建华晟网络科技，并保留所有权利。
 * 网站地址: http://www.fldcms.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * Author: fld
 * Date: 2017-08-09
 */
namespace app\admin\controller;
use think\Request;
use think\Db;
use think\exception;
/**
 * 角色管理
 * @author fld
 *
 */
class RoleController extends BaseController{
	/**
	 * 角色列表
	 */
	public function indexOp(){
		$model = model('Base');
		$result = $this->getCondition();
		$field = "role_id,role_name,role_remark,add_time";
		$order = "role_id desc";
		$list = $model->select_table_by_page('role',$result['condition'],$field,$order,$result['query']);
		$this->assign("list",$list);
		// 获取分页显示
		$page = $list->render();
		$this->assign('page', $page);
		return $this->fetch();
	}
	
	public function getCondition(){
		$result = array();
		$condition = array();
		$query = array();
		//关键字
		$keyword = input('param.keyword/s');
		if(!empty($keyword)){
			$condition['role_name'] = array('like','%'.$keyword.'%');
			$query['keyword'] = $keyword;
		}
		$this->assign('keyword',$keyword);
		$result['condition'] = $condition;
		$result['query'] = $query;
		return $result;
	}
	
	/**
	 * 添加角色信息
	 */
	public function addOp(){
	    if (chksubmit()){
	    	$result = array();
	        $model = model('base');
	        Db::startTrans();
	        try {
	        	$data = array();
	        	$data['role_name'] = input('post.role_name');
	        	$data['role_remark'] = input('post.role_remark');
	        	$res = $model->add_table('role',$data);
	        	if($res !== false){
	        		$role_access = input('post.role_access/a');
	        		if(count($role_access) > 0){
	        			foreach ($role_access as $v){
	        				$data = array();
	        				$data['role_id'] = $res;
	        				$data['node_id'] = $v;
	        				$res1 = $model->add_table('role_node',$data,0);
	        				if($res1 === false){
	        					throw new \think\Exception('权限保存失败');
	        				}
	        			}
	        		}
        			model('ActionLog')->action_log("添加","添加角色成功，角色编号=".$res."，角色名称=".$_POST['role_name']);
	        	}else{
	        		throw new \think\Exception('角色保存失败');
	        	}
	        } catch (\Exception $e) {
	        	// 回滚事务
	        	Db::rollback();
	        	//echo $e->getMessage();
	        	$this->error('添加角色失败');
	        }
	        // 提交事务
	        Db::commit();
	        $this->success('添加角色成功',url('role/index'));
	    }else{
	    	$node_list = model('Node')->getNodes(0,2);
	    	$this->assign('node_list',$node_list);
	        return $this->fetch();
	    }
	}
	/**
	 * 编辑角色信息
	 */
	public function editOp(){
		$model = model('base');
		if (chksubmit()){
			$result = array();
			Db::startTrans();
			$role_id = input('post.role_id');
			try {
				$data = array();
				$data['role_name'] = input('post.role_name');
				$data['role_remark'] = input('post.role_remark');
				//更新角色信息
				$res = $model->update_table('role',array('role_id'=>$role_id),$data);
				if($res !== false){
					//删除关联的角色权限
					$res1 = $model->delete_table('role_node',array('role_id'=>$role_id));
					if($res1 !== false){
						$role_access = input('post.role_access/a');
						if(count($role_access) > 0){
							foreach ($role_access as $v){
								$data = array();
								$data['role_id'] = $role_id;
								$data['node_id'] = $v;
								$res2 = $model->add_table('role_node',$data,0);
								if($res2 === false){
									throw new \think\Exception('角色权限保存失败');
								}
							}
						}
						model('ActionLog')->action_log("更新","更新角色成功，角色编号=".$role_id."，角色名称=".input('post.role_name'));
						$result['error'] = 0;
						$result['msg'] = '更新角色成功';
					}else{
						throw new \think\Exception('删除关联的角色权限失败');
					}
				}else{
					throw new \think\Exception('角色更新失败');
				}
			} catch (Exception $e) {
				// 回滚事务
				Db::rollback();
				$result['error'] = 1;
				$result['msg'] = '更新角色失败';
			}
			// 提交事务
			Db::commit();
			return json($result);
		}else{
			//角色信息
			$role_id = input('param.role_id');
			$role_info = $model->find_table('role',array('role_id'=>$role_id));
			$this->assign('vo',$role_info);
			//角色权限信息
			$role_node_list = $model->select_table('role_node',array('role_id'=>$role_id),'node_id');
			$node_info = two_array_one($role_node_list,'node_id');
			$this->assign('node_info',$node_info);
			//权限节点信息
			$node_list = model('Node')->getNodes(0,2);
			$this->assign('node_list',$node_list);
			return $this->fetch();
		}
	}
	/**
	 * 删除角色信息
	 */
	public function deleteOp(){
		$result = array();
		$role_id = input('param.role_id');
		$model = model('base');
		Db::startTrans();
		try {
			$role_info = $model->find_table('role',array('role_id'=>$role_id),'role_id,role_name');
			$res = $model->delete_table('role',array('role_id'=>$role_id));
			if($res !== false){
				$res1 = $model->delete_table('role_node',array('role_id'=>$role_id));
				if($res1 !== false){
					model('ActionLog')->action_log("删除","删除角色成功，角色编号=".$role_info['role_id']."，角色名称=".$role_info['role_name']);
					$result['error'] = 0;
				}else{
					throw new \think\Exception('删除失败');
				}
			}else{
				throw new \think\Exception('删除失败');
			}
		} catch (Exception $e) {
			// 回滚事务
			Db::rollback();
			$result['error'] = 1;
		}
		// 提交事务
		Db::commit();
		return json($result);
	}
	
	/**
	 * 添加角色时检查角色名称是否存在
	 */
	public function check_ajaxOp(){
		$role_name = input('post.role_name');
		$model = model('base');
		$info = $model->find_table('role',array('role_name'=>$role_name));
		if($info){
			return json(false);
		}else{
			return json(true);
		}
	}
	/**
	 * 编辑角色时检查角色名称是否存在
	 */
	public function checkEdit_ajaxOp(){
		$role_name = input('post.role_name');
		$role_id = input('post.role_id');
		$model = model('base');
		$condition = array();
		$condition['role_name'] = $role_name;
		$condition['role_id'] = array('neq',$role_id);
		$info = $model->find_table('role',$condition);
		if($info){
			return json(false);
		}else{
			return json(true);
		}
	}
	
}